<?php

namespace app\lib\exception;

use think\Config;
use think\Exception;

class BaseException extends Exception
{
    /**
     * BaseException constructor.
     *
     * @param int   $code
     * @param mixed $msg  数组或者字符串，如果是数组则需要符合Exception规范,即：错误信息,错误码
     *                    如果是字符串，则对应配置文件中 /extra/error.php 中的配置信息
     *                    如果抛出异常的参数错误则返回默认错误：EXCEPTION_ERROR
     */
    public function __construct($msg = null, $code = null)
    {
        if (null === $code && \is_string($msg) && Config::has('error.'.$msg)) {
            $errorData = Config::get('error.'.$msg);
        } else {
            if (!is_numeric($code) && Config::has('error.'.$code)) {
                $error = Config::get('error.'.$code);
                $code = $error['code'];
                $msg = $error['msg'].':'.$msg;
            }
            $errorData['msg'] = $msg;
            $errorData['code'] = $code;
        }
        parent::__construct($errorData['msg'], $errorData['code'], null);
    }
}
